package com.codeduck.task.spring;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 定时任务配置类 {@link SpringTaskConfig}
 *
 * @author: <a href="mailto:codeduck@163.com">Codeduck</a>
 * @createDate: 2021-12-26
 */
@Component
@Slf4j
public class SpringTaskDemo {

    // cron表达式在线生成： https://www.bejson.com/othertools/cron/
    @Scheduled(cron = "0 0/1 * * * *")
    public void scheduled1() throws InterruptedException {
        Thread.sleep(3000);
        // 每隔4秒执行一次，但是因为任务本身消耗3秒的时间，因此 上一次任务结束到下一次任务开始，只间隔1秒
        log.info("scheduled1 每4秒执行一次：{}", LocalDateTime.now());
    }

//    @Scheduled(fixedRate = 1000)
    public void scheduled2() throws InterruptedException {
        Thread.sleep(3000);
        // 每一秒的频率执行一次，但是因为任务本身消耗3秒时间，因此 上一次任务结束后直接开始下一次任务
        log.info("scheduled2 每1秒执行一次：{}", LocalDateTime.now());
    }

//    @Scheduled(fixedDelay = 3000)
    public void scheduled3() throws InterruptedException {
        Thread.sleep(5000);
        log.info("scheduled3 上次执行完毕后隔3秒继续执行：{}", LocalDateTime.now());
    }
}
